package com.daka.tools;


import java.util.ArrayList;
import java.util.List;

/**
 * 与具体ORM实现无关的分页参数及查询结果封装.
 * <p/>
 * 注意所有序号从1开始.
 *
 * @param <T>
 * Page中记录的类型.
 */
public class Page<T> {

	protected int pageStart = 1;
	protected int pageSize = 10;
	protected List<T> list = new ArrayList<T>();
	protected long total = 0;

	public Page() {
	}

	public Page(int pageSize) {
		this.pageSize = pageSize;
	}

	public Page(int pageStartPos, int pageSize) {
		this.pageStart = pageStartPos;
		this.pageSize = pageSize;
	}

	public int getPageStart() {
		return pageStart;
	}

	public void setPageStart(final int pageStartPos) {
		this.pageStart = pageStartPos;
		if (pageStartPos < 1) {
			this.pageStart = 1;
		}
	}

	public Page<T> pageStartPos(final int pageStartPos) {
		setPageStart(pageStartPos);
		return this;
	}

	public int getPageSize() {
		return pageSize;
	}

	/**
	 * 设置每页的记录数量.
	 */
	public void setPageSize(final int pageSize) {
		this.pageSize = pageSize;
	}

	/**
	 * 返回Page对象自身的setPageSize函数,可用于连续设置。
	 */
	public Page<T> pageSize(final int thePageSize) {
		setPageSize(thePageSize);
		return this;
	}

	/**
	 * 获得页内的记录列表.
	 */
	public List<T> getList() {
		return list;
	}

	/**
	 * 设置页内的记录列表.
	 */
	public void setList(final List<T> result) {
		this.list = result;
	}

	/**
	 * 获得总记录数, 默认值为-1.
	 */
	public long getTotal() {
		return total;
	}

	/**
	 * 设置总记录数.
	 */
	public void setTotal(final long total) {
		this.total = total;
	}

	/**
	 * 根据pageSize与totalCount计算总页数, 默认值为-1.
	 */
	public long getTotalPages() {
		if (total < 0) {
			return -1;
		}
		long count = total / pageSize;
		if (total % pageSize > 0) {
			count++;
		}
		return count;
	}
	
//	public long getPageIndex(){
//		if (pageStart < 0) {
//			return -1l;
//		} else if (pageStart == 0) {
//			return 1l;
//		}else {
//			long count = (pageStart / pageSize)+1;
//			if (pageStart % pageSize > 0) {
//				count++;
//			}
//			return count;
//		}
//	}
	
//	/**
//	 * 是否还有下一页.
//	 *
//	 * @return boolean
//	 */
//	public boolean isHasNext() {
//		return (pageStart + 1 <= getTotalPages());
//	}

//	/**
//	 * 取得下页的页号, 序号从1开始. 当前页为尾页时仍返回尾页序号.
//	 */
//	public int getNextPage() {
//		if (isHasNext()) {
//			return pageStart + 1;
//		} else {
//			return pageStart;
//		}
//	}
//
//	/**
//	 * 是否还有上一页.
//	 */
//	public boolean isHasPre() {
//		return (pageStart - 1 >= 1);
//	}
//
//	/**
//	 * 取得上页的页号, 序号从1开始. 当前页为首页时返回首页序号.
//	 */
//	public int getPrePage() {
//		if (isHasPre()) {
//			return pageStart - 1;
//		} else {
//			return pageStart;
//		}
//	}

}
